/**
 * created by 小卷毛, 2020/9/14
 * Copyright (c) 2020, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.sgcc.pda.lib_tools_database.util;

import android.text.TextUtils;

import com.sgcc.pda.lib_tools_database.bean.other.VersionItem;
import com.sgcc.pda.tools.JsonUtils;
import com.sgcc.pda.tools.SPUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 描 述：知识库版本更新参数封装类
 * 作 者：小卷毛  2020-09-14 11:07
 * 修改描述：
 * 修 改 人：
 * 修改版本：
 */
public class InputParam {

    private final String KEY_DATEBASE = "sgcc_datebase";

    private Map<String, String> tableMap = new HashMap<>();

    public InputParam() {
        tableMap.put("KN_SEC_CTL_PROC", "{}");
        tableMap.put("KN_WORK_CONTENT", "{}");
        tableMap.put("KN_MEASURE_RISK", "{}");
        tableMap.put("KN_MEASURE_SUMMARY", "{}");
        tableMap.put("KN_REL_MEASURE_PROC", "{}");
        tableMap.put("KN_RISK_POINT_MEASURE", "{}");
        tableMap.put("KN_TYPICAL_EXP", "{}");
        tableMap.put("KN_STAN_VIDEO", "{}");

        // 如果数据库不存在则重新拉取数据
        if (!DataBaseConfigTools.isDBExist()) {
            SPUtils.put(KEY_DATEBASE, "");
        }

        String value = SPUtils.get(KEY_DATEBASE, "");
        if (!TextUtils.isEmpty(value)) {
            List<VersionItem> list = JsonUtils.toList(value, VersionItem.class);

            for (VersionItem item : list)
                tableMap.put(item.getTableName(), toJson(item));
        } else {
            for (String key : tableMap.keySet()) {
                VersionItem item = new VersionItem();
                item.setTableName(key);
                item.setVersionNo("0");
                item.setTimestamp("");
                item.setLastUpdateTime("");

                tableMap.put(key, toJson(item));
            }
        }
    }

    private String toJson(VersionItem item) {
        JSONObject jsonObj = new JSONObject();
        try {
            jsonObj.put("tableName", item.getTableName());
            jsonObj.put("versionNo", item.getVersionNo());
            jsonObj.put("timestamp", item.getTimestamp());
            jsonObj.put("lastUpdateTime", item.getLastUpdateTime());
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return jsonObj.toString();
    }

    /**
     * 获取请求参数
     */
    public String getArrayParam() {
        try {
            JSONArray jsonArray = new JSONArray();

            for (String key : tableMap.keySet()) {
                //noinspection ConstantConditions
                JSONObject item = new JSONObject(tableMap.get(key));
                if (!item.has("tableName")) {
                    item.put("tableName", key);
                    item.put("versionNo", "0");
                    item.put("timestamp", "");
                    item.put("lastUpdateTime", "");
                }
                jsonArray.put(item);
            }

            return jsonArray.toString();
        } catch (JSONException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 保存请求参数
     */
    public void saveParam(VersionItem item) {
        tableMap.put(item.getTableName(), toJson(item));
        SPUtils.put(KEY_DATEBASE, getArrayParam());
    }

    /**
     * 保存请求参数
     */
    public void saveParams(List<VersionItem> list) {
        for (VersionItem item : list)
            tableMap.put(item.getTableName(), toJson(item));

        SPUtils.put(KEY_DATEBASE, getArrayParam());
    }

}
